﻿#pragma once

#ifndef ARD_FUNCTION
#define ARD_FUNCTION

///公有宏定义文件

#define GetBitMap(x,n,m)		((x>>n) & (((uint64_t)1 << (m+1))-1))
#define GetBitMask(x,n)			(x&n)
#define GetBitBool(x,n)			!!GetBitMask(x,n)

#define TODO()					Abort(__func__<<" Must todo ->"<<std::dec<<":"<<__LINE__)
#define WARNTODO()				LogW(__func__<<" Need todo,line:"<<std::dec<<__LINE__)
#define UNREACHABLED()			Abort("can\'t reach here ->"<<__func__<<std::dec<<":"<<__LINE__) 
#define UNDEFINE()				LogW(__func__<<" undefine,line:"<<std::dec<<__LINE__)

//将宽度为n的有符号数据扩展为m的数据类型宽度
#define SignExtend(m,x,n)		{struct AA{int64_t a:n;};struct AA a={.a=x};m=a.a;}

#define GeneralRN(m,base,n)		*(&m->base+n)

#define IsFeatureImplemented(m)	m	
#endif // !ARD_FUNCTION
